package com.controller;

import com.api.CommonResult;
import com.entity.Users;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * 用户信息表 控制层。
 *
 * @author admin
 * @since 2025-11-21
 */
@Controller // 用于返回页面，若需混合返回JSON可使用@RestController+@GetMapping(produces="text/html")
@RequestMapping("/admin/user")
public class UsersController {

    @Autowired
    private UsersService userService;

    /**
     * 用户列表分页查询（支持用户名模糊搜索）
     */
    @GetMapping("userList")
    public String page(
            // 分页对象由MyBatis-Plus自动注入，也可手动创建
            Page<Users> page,
            @RequestParam(value = "p", defaultValue = "1") int p,
            @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
            @RequestParam(value = "userName", required = false) String userName,
            Model model) {

        // 设置分页参数
        page.setPageSize(pageSize); // 页码（MyBatis-Plus 3.4+ 推荐用setCurrent替代setPageNumber）
        page.setPageNumber(p); // 每页条数（推荐用setSize替代setPageSize）

        // 构建查询条件
        QueryWrapper queryWrapper = new QueryWrapper();
        if (userName != null && !userName.trim().isEmpty()) {
            queryWrapper.like("username", userName.trim()); // 防止空字符串导致全表模糊查询
        }

        // 执行分页查询（修复userPage未定义问题）
        Page<Users> userPage = userService.page(page, queryWrapper);

        // 封装分页数据到模型
        model.addAttribute("page", userPage);
        model.addAttribute("userName", userName); // 回显搜索关键词
        return "back/user-list";
    }

    /**
     * 显示添加用户页面
     */
    @GetMapping("addView")
    public String addView() {
        return "back/user-add";
    }

    /**
     * 新增用户
     */
    @PostMapping("save")
    @ResponseBody
    public CommonResult save(Users user) {
        try {
            QueryWrapper checkWrapper = new QueryWrapper();
            checkWrapper.eq("username", user.getUsername());
            if (userService.count(checkWrapper) > 0) {
                return CommonResult.failed(user.getUsername() + "已存在");
            }

            boolean saveSuccess = userService.save(user);
            return saveSuccess ? CommonResult.success("新增成功") : CommonResult.failed("新增失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }


    /**
     * 显示编辑用户页面
     */
    @GetMapping("updateView")
    public String updateView(
            @RequestParam("id") int id, // 明确指定参数来源（推荐用@RequestParam替代直接int id）
            Model model) {

        // 根据ID查询用户（优化：直接用getById替代构造QueryWrapper）
        Users user = userService.getById(id);

        if (user == null) {
            model.addAttribute("errorMsg", "用户不存在或已删除");
            return "back/error"; // 跳转到错误页面
        }

        model.addAttribute("user", user);
        return "back/user-edit";
    }

    /**
     * 更新用户信息
     */
    @PostMapping("update")
    @ResponseBody
    public CommonResult update(@RequestBody Users user) { // 表单提交可改为@ModelAttribute User user
        try {
            // 校验用户是否存在
            if (user.getId() == null || !UsersService.existsById(user.getId())) {
                return CommonResult.failed("用户不存在");
            }

            // 可选：更新前校验用户名是否重复（排除当前用户）
            QueryWrapper checkWrapper = new QueryWrapper();
            checkWrapper.eq("username", user.getUsername())
                    .ne("id", user.getId()); // 排除自身
            if (userService.count(checkWrapper) > 0) {
                return CommonResult.failed(user.getUsername() + "已存在");
            }

            boolean updateSuccess = userService.updateById(user);
            return updateSuccess ? CommonResult.success("修改成功") : CommonResult.failed("修改失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }

    /**
     * 删除用户
     */
    @PostMapping("del")
    @ResponseBody
    public CommonResult del(@RequestParam("id") int id) {
        try {
            // 校验用户是否存在
            if (!UsersService.existsById(id)) {
                return CommonResult.failed("用户不存在或已删除");
            }

            boolean deleteSuccess = userService.removeById(id);
            return deleteSuccess ? CommonResult.success("删除成功") : CommonResult.failed("删除失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }

}
